From: Ian Jackson Date: Fri, 14 Nov 2014 14:41:38 +0000 (+0000) Subject: libxl: Fix if{} nesting in do_pci_remove X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~4001 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success/%22http:/www.example.com/cgi/success?a=commitdiff_plain;h=7ca2558c048c7d5d2a6d401e58181a06a00f9eeb;p=xen.git libxl: Fix if{} nesting in do_pci_remove do_pci_remove contained this: if (type == LIBXL_DOMAIN_TYPE_HVM) { [stuff] } else if (type != LIBXL_DOMAIN_TYPE_PV) abort(); { This is bizarre, and not correct. The effect is that HVM guests end up running both the proper code and that intended for PV guests. This causes (amongst other things) trouble when PCI devices are hot-unplugged from HVM guests. This bug was introduced in abfb006f "tools/libxl: explicitly grant access to needed I/O-memory ranges". This is clear candidate for Xen 4.5, being a bugfix to an important feature. Reported-by: Boris Ostrovsky Signed-off-by: Ian Jackson Tested-by: Robert Hu Rlease-Acked-by: Konrad Rzeszutek Wilk Acked-by: Ian Campbell CC: Sander Eikelenboom CC: George Dunlap --- diff --git a/tools/libxl/libxl_pci.c b/tools/libxl/libxl_pci.c index 316643cffc..9ae37fa313 100644 --- a/tools/libxl/libxl_pci.c +++ b/tools/libxl/libxl_pci.c @@ -1247,9 +1247,9 @@ static int do_pci_remove(libxl__gc *gc, uint32_t domid, rc = ERROR_FAIL; goto out_fail; } - } else if (type != LIBXL_DOMAIN_TYPE_PV) - abort(); - { + } else { + assert(type == LIBXL_DOMAIN_TYPE_PV); + char *sysfs_path = libxl__sprintf(gc, SYSFS_PCI_DEV"/"PCI_BDF"/resource", pcidev->domain, pcidev->bus, pcidev->dev, pcidev->func); FILE *f = fopen(sysfs_path, "r");